package com.framework.foundation.test;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import org.junit.Test;

public class LotteryUtil {

	@Test
	public void test() {
		List<Gift> list = new ArrayList<Gift>();
		list.add(new Gift("1", 2, 0.2d));
		list.add(new Gift("2", 5, 0.6d));
		list.add(new Gift("3", 6, 0.1d));

		Gift gift = lottery(list);
		System.out.println(gift);
		System.out.println(list);

	}

	public Gift lottery(List<Gift> list) {
		List<Double> orignalRates = new ArrayList<Double>(list.size());
		if (list.size() > 0) {
			for (Gift ggljps : list) {
				orignalRates.add(ggljps.getGl());
			}
		}
		if (orignalRates.isEmpty()) {
			return null;
		}

		int size = orignalRates.size();

		// // 计算总概率，这样可以保证不一定总概率是1
		// double sumRate = 0d;
		// for (double rate : orignalRates) {
		// sumRate += rate;
		// }

		// 计算每个物品在总概率的基础下的概率情况
		List<Double> sortOrignalRates = new ArrayList<Double>(size);
		Double tempSumRate = 0d;
		for (double rate : orignalRates) {
			tempSumRate += rate;
			sortOrignalRates.add(tempSumRate);
		}

		if (tempSumRate < 1) {
			sortOrignalRates.add(1.0d);
		}

		System.out.println(sortOrignalRates);

		// 根据区块值来获取抽取到的物品索引
		double nextDouble = Math.random();
		sortOrignalRates.add(nextDouble);
		Collections.sort(sortOrignalRates);

		// 获取当前随机数对应区间中的下标
		int index = sortOrignalRates.indexOf(nextDouble);

		// 当前中奖奖品信息
		Gift ggljp = list.get(index);

		// 中奖奖品数量
		int number = ggljp.getNum();
		if (number <= 0) {
			return null;
		} else {
			// 减去中奖奖品数量
			ggljp.setNum(--number);
			return ggljp;
		}
	}
}
